fajlovi prikačeni uz rok.U arhivi se nalaze: XML schema (.xsd), XML dokument (.xml), XQuery upit ili XPath putanja (.xq), SQL dump baze (.sql), visio 2003 dijagram (.vsd) ukoliko postoje takvi fajlovi vezani za zadatke.
XML: za sve fajlove je
provereno da li su dobro oformljeni, a ako postoji i xml fajl i schema,
xml fajl je validiran u odnosu na odgovarajuću šemu. Za kreiranje
fajlova, proveru forme, validaciju, XPath i XQuery izraze korišćen je
XML editor EditX http://www.editix.com/
SQL: baza je
napravljena u MySQL-u pa prema tome SQL kod može imati netipičnu
sintaksu ili funkcije različite od onih u knjizi. Upiti su provereni,
prema mom shvatanju zadataka, koji često nisu baš lako shvatljivi.
Najlakše je preko MySQLyog-a uraditi "restore from SQL dump" da bi
mogli da probate upite nad podacima. Alati: MySQL http://www.mysql.com, MySQLyog www.webyog.com
ProjektniTim (ŠifraProjekta, JMBG, NazivProjekta, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora)
ŠifraProjekta, JMBG --> PeriodAngažovanja, ŠifraSektora, NazivSektora, NazivProjekta, ImePrezime
ŠifraProjekta --> NazivProjekta
JMBG --> ImePrezime, ŠifraSektora, NazivSektora
ŠifraSektora --> NazivSektora
NazivSektora --> ŠifraSektora
u relaciji R atribut R.B (R.A i R.B mogu biti složeni) funkcionalno zavisi od atributa R.A (R.A funkcionalno određuje R.B) ako za svaku vrednost R.A postoji jedna i samo jedna vrednost R.B
atribut R.B potpuno funkcionalno zavisi od atributa R.A ako funkcionalno zavisi od atributa R.A ali ne i od nekog pravog podskupa atributa R.A
determinanta je bilo koji prost ili složen atribut od koga neki drugi atribut u relaciji potpuno funkcionalno zavisi.
Relacija R je u Boyce-Codd ovoj normalnoj formi ako su sve determinante ujedno i kandidati za ključ relacije.
ŠifraProjekta --> NazivProjekta(D)
ŠifraSektora --> NazivSektora(D)
NazivSektora --> ŠifraSektora(D)
JMBG --> ImePrezime, ŠifraSektora, NazivSektora(D)
JMBG, ŠifraProjekta --> PeriodAngažovanja(D)(KK)
očigledno je da relacija nije u BC normalnoj formi. Dekompozicijom pri kojoj se iz relacije izvlače projekcije sa onim determinantama koje nisu kandidati za ključ, relacija se svodi na BCNF.
Projekat(ŠifraProjekta, NazivProjekta) jeste BCNF
ProjektniTim2(ŠifraProjekta, JMBG, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora) nije BCNF (4D, 1KK)
dalje se dekomponuje relacija ProjektniTim2
Radnik(JMBG, ImePrezime, ŠifraSektora, NazivSektora) nije BCNF (3D, 1KK)
ProjektniTim3(ŠifraProjekta, JMBG, PeriodAngažovanja) jeste BCNF
dalje se dekomponuje relacija Radnik
Radnik2(JMBG, ImePrezime, ŠifraSektora) jeste BCNF
Sektor(ŠifraSektora, NazivSektora) jeste BCNF
Sektor(ŠifraSektora, NazivSektora)
Radnik(JMBG, ImePrezime, ŠifraSektora)
Projekat(ŠifraProjekta, NazivProjekta)
ProjektniTim(ŠifraProjekta, JMBG, PeriodAngažovanja)
A (A1#, A2, B1#)
B (B1#, B2, A1#)
G (B1#, G1)
D (A1#,D1)
E (E1#, E2)
H (B1#, A1#, E1#, H1)
C (E1#, C1)
F (E1#, F1)
FF (E1#, E1#)
class A (extent As key A1#){
attribute string A1#;
attribute string A2;
relationship set<B> AB1 inverse B :: BA1;
relationship B AB2 inverse B :: BA2;
};
class B (extent Bs key B1#){
attribute string B1#;
attribute string B2;
attribute set<G> Gs;
relationship A BA1 inverse A :: AB1;
relationship set<A> BA2 inverse A :: AB2;
relationship H BH inverse H :: HB;
};
class D extends A{
attribute string D1;
attribute set<H> DH inverse H :: HD;
};
class G {
attribute string G1;
};
class H {
attribute string H1;
relationship B HB inverse B :: BH;
relationship D HD inverse D :: DH;
relationship E HE inverse E :: EH;
};
Spoljno spajanje se koristi kako bi se u rezultat spajanja uključili i oni redovi koji ne zadovoljavaju uslov spajanja.
Za ilustraciju ćemo koristiti sledeće tabele:
| ŠifraOdeljenja | NazivOdeljenja |
|---|---|
| 1 | Uprava |
| 2 | Računski centar |
| 3 | Proizvodnja |
| ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|
| 1000 | Pera Perić | 1 |
| 1001 | Marko Marković | 1 |
| 1002 | Žika Žikić | 2 |
| 1003 | Laza Lazić | 2 |
| 1004 | Petar Petrović |
omogućuje uključivanje u rezultujuću tabelu svih redova sa leve strane JOIN klauzule tako što se praznim redom proširuje tabela sa desne strane
Odeljenje LEFT OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 3 | Proizvodnja |
omogućuje uključivanje u rezultujuću tabelu svih redova sa desne strane JOIN klauzule tako što se praznim redom proširuje tabela sa leve strane
Odelenje RIGHT OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 1004 | Petar Petrović |
omogućuje uključivanje u rezultat svih redova leve i desne tabele, a tamo gde uslov spajanja nije ispunjen odgovrajuća strana je popunjena praznim poljima
Odelenje FULL OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 3 | Proizvodnja | |||
| 1004 | Petar Petrović |
U ODMGu postoje dve vrste nasleđivanja: nasleđivanje ponašanja i nasleđivanje stanja.
Za nasleđivanje ponašanja se koristi veza nadtip-podtip (koja se ponekad naziva veza generalizacija-specijalizacija ili ISA veza)
na primer:
interface Osoba{
...
};
class Radnik : Osoba{
...
};
Za nasleđivanje stanja se uvodi veza extends. U ovoj vezi izmedju klasa, podređena klasa nasleđuje celokupno stanje i ponašanje klase koju proširuje. Klasa može naslediti samo jednu klasu extends nasleđivanjem.
na primer:
class Osoba {
...
};
class Radnik extends Osoba{
...
};
Svako pravilo se donosi na određeni događaj, vrši proveru uslova po nastanku događaja i izvršava definisanu akciju ako je uslov zadovoljen. Izuzetno je moguće formirati pravilo koje se izvršava bezuslovno.
Generalno razlikujemo primitivne i složene događaje.
Primitivni doga]aji su:
Složeni događaji se formiraju kombinovanjem primitivnih i prethodno definisanih složenih događaja. Kao operatori za kombinovanje se mogu koristiti logički operatori (AND, OR, NOT), sekvence događaja, vremenske kompozicije...
Prouzrokuje prekid izvršavanja transakcije odmah po identfikovanju događaja za koji postoji definisano ECA-pravilo.
Izrvšavanje pravila se odlaže do završetka transakcije koja je proizvela događaj.
Pravilo postaje sasvim nova transakcija koja se izvršava nezavisno od polazne.
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.w3.org/2001/XMLSchema
http://www.w3.org/2001/XMLSchema.xsd">
<xsd:element name="Model">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Kompanija" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="PIB" type="xsd:ID"/>
<xsd:attribute name="Naziv" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Letilica">
<xsd:attribute name="LID" type="xsd:ID"/>
</xsd:complexType>
<xsd:element name="Avion" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="Letilica">
<xsd:attribute name="BrojSedista" type="xsd:integer"/>
<xsd:attribute name="BrojMotora" type="xsd:string"/>
<xsd:attribute name="Proizvodjac" type="xsd:IDREF" use="required"/>
<xsd:attribute name="Vlasnik" type="xsd:IDREF" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="utf-8"?>
<Model
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:///D:/My%20FON/IV%20godina/I%20semestar/Baze%20podataka/BProkovi2008/jun2008/podA.xsd">
<Kompanija PIB="K1" Naziv="Prince Aviation"/>
<Kompanija PIB="K2" Naziv="Airbus"/>
<Avion LID="A1" BrojSedista="50" BrojMotora="M1111" Proizvodjac="K2" Vlasnik="K2"/>
<Avion LID="A2" BrojSedista="50" BrojMotora="M1112" Proizvodjac="K2" Vlasnik="K1"/>
</Model>
//Avion[@Proizvodjac=@Vlasnik]
for
$x in doc("podB.xml")/Model/Avion
where
$x/@Proizvodjac = $x/@Vlasnik
return
$x
select SifraZap, Ime, Prezime, Mlb, NazivProf from ZAPOSLENI join OBRAZOVNI_PROFIL using(SifraProf) where StepenStrSpreme = 'V' and (((extract(year from current_date)-extract(year from DatRodj))=65 and Pol='M') or ((extract(year from current_date)-extract(year from DatRodj))=58 and Pol='Z'))
select SifraRM, NazivRM, NazivProf from RADNO_MESTO join OBRAZOVNI_PROFIL using(SifraProf) where SifraRM not in (select distinct SifraRM from ANGAZOVANJE)
create view STATISTIKA(SIFRA_PROFILA, NAZIV_PROFILA, BR_ZAP_2007, BR_ZAP_2008, TREND) as select SifraProf, NazivProf, sum(case when extract(year from datOd)=2007 then 1 else 0 end), sum(case when extract(year from datOd)=2008 then 1 else 0 end), case when sum(case when extract(year from datOd)=2007 then 1 else 0 end)>sum(case when extract(year from datOd)=2008 then 1 else 0 end) then 'PAD' when sum(case when extract(year from datOd)=2006 then 1 else 0 end)<sum(case when extract(year from datOd)=2007 then 1 else 0 end) then 'RAST' else 'BEZ_PROMENA' end from OBRAZOVNI_PROFIL join RADNO_MESTO using(SifraProf) join ANGAZOVANJE using(SifraRM) group by SifraProf, NazivProf